Phytoplankton

Phytoplankton#

import warnings
warnings.filterwarnings("ignore")
import os
import os.path as op
import sys

import pandas as pd
import numpy as np
import geopandas as gpd
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

sys.path.append("../../../../indicators_setup")
from ind_setup.plotting_int import plot_timeseries_interactive
from ind_setup.plotting import plot_base_map, plot_map_subplots, plot_bar_probs
from ind_setup.core import fontsize

sys.path.append("../../../functions")
from data_downloaders import download_ERDDAP_data

Define area of interest

#Area of interest
lon_range  = [129.4088, 137.0541]
lat_range = [1.5214, 11.6587]

EEZ shapefile

shp_f = op.join(os.getcwd(), '..', '..','..', 'data/Palau_EEZ/pw_eez_pol_april2022.shp')
shp_eez = gpd.read_file(shp_f)

Download Data#

DATASET: https://oceanwatch.pifsc.noaa.gov/erddap/info/md50_exp/index.html

base_url = 'https://oceanwatch.pifsc.noaa.gov/erddap/griddap/md50_exp.csv'
dataset_id = 'MD50'
date_ini = '1998-01-01T00:00:00Z'
date_end = '2023-12-01T00:00:00Z'

data = download_ERDDAP_data(base_url, dataset_id, date_ini, date_end, lon_range, lat_range)
data_xr = data.set_index(['latitude', 'longitude', 'time']).to_xarray()
data_xr['time'] = pd.to_datetime(data_xr.time)
data_xr = data_xr.coarsen(longitude=2, latitude=2).mean()
ax = plot_base_map(shp_eez = shp_eez, figsize = [10, 6])
im = ax.pcolor(data_xr.longitude, data_xr.latitude, data_xr.mean(dim='time')[dataset_id], transform=ccrs.PlateCarree(), 
                cmap = 'YlGnBu', vmin = 0.4, vmax = 1.6)
ax.set_extent([lon_range[0], lon_range[1], lat_range[0], lat_range[1]], crs=ccrs.PlateCarree())
plt.colorbar(im, ax=ax, label='Phytoplankton (µm)')
<matplotlib.colorbar.Colorbar at 0x1764112b0>
../../../_images/fff762bbb1a651d731897b10f3dee976b062e1ebb77e5f6b586b11e396cbd47d.png
data_y = data_xr.resample(time='1YE').mean()
plot_map_subplots(data_y, 'MD50', shp_eez = shp_eez, cmap = 'YlGnBu', vmin = 0.4, vmax = 1.6, cbar = 1)
../../../_images/da91f3643585c483b4bac0d94c76a23aa20f912ab54f4d663313adfe7ee99fbf.png
data_an = data_y - data_xr.mean(dim='time')
plot_map_subplots(data_an, dataset_id, shp_eez = shp_eez, cmap='RdBu_r', vmin=-.3, vmax=.3, cbar = 1)
../../../_images/c817369524f6264e853b3a47e76a979ad35a1b93c9b6844a87798e63608e538c.png

Mean Area#

dict_plot = [{'data' : data_xr.mean(dim = ['longitude', 'latitude']).to_dataframe(), 
              'var' : dataset_id, 'ax' : 1, 'label' : 'Median Phytoplankton Size - MEAN AREA'},]
fig = plot_timeseries_interactive(dict_plot, trendline=True, scatter_dict = None, figsize = (25, 12));
data_bars = data_xr.mean(dim = ['longitude', 'latitude']).to_dataframe().resample('1M').mean()
x = data_bars.index.values
x = x.view('int64') // 1e9 
plot_bar_probs(x = x, y = data_bars[dataset_id].values, trendline = True,
               y_label = dataset_id, figsize = (15, 5))
<Axes: ylabel='MD50'>
../../../_images/f93014c6163194633e8f90ad5ac2b73d52d65ee9f2634cf6af16a0aade5f548b.png

Given point#

loc = [7.35, 134.48]
dict_plot = [{'data' : data_xr.sel(longitude=loc[1], latitude=loc[0], method='nearest').to_dataframe(), 
              'var' : dataset_id, 'ax' : 1, 'label' : f'Median Phytoplankton Size at [{loc[0]}, {loc[1]}]'},]
ax = plot_base_map(shp_eez = shp_eez, figsize = [10, 6])
ax.set_extent([lon_range[0], lon_range[1], lat_range[0], lat_range[1]], crs=ccrs.PlateCarree())
ax.plot(loc[1], loc[0], '*', markersize = 12, color = 'royalblue', transform=ccrs.PlateCarree(), label = 'Location Analysis')
ax.legend()
<matplotlib.legend.Legend at 0x17bcc7380>
../../../_images/ee07af72cab207c16a20e0c2ca5ccc1db6eb8b22fed5926e82a437eeb521c1c6.png
fig = plot_timeseries_interactive(dict_plot, trendline=True, scatter_dict = None, figsize = (25, 12));